package com.anivia.common.web.privoder;

import com.anivia.common.core.enums.DataHandlerBizEnum;
import com.anivia.common.core.enums.DataScopeEnum;
import com.anivia.common.core.enums.DesensitizedTypeEnum;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 获取数据权限处理接口
 *
 * @author wangj
 */
public interface DataHandlerProvider {
    /**
     * 通过资源查询数据权限类型
     */
    List<DataScopeEnum> getDataScopeByResource(Integer resourceId);

    /**
     * 查询子部门id集合
     *
     * @param deptId 当前用户的部门id
     * @return 下级部门id集合
     */
    Set<Integer> getSubDeptIds(Integer deptId);

    /**
     * 查询自定义配置的部门id集合
     *
     * @return 自定义配置的部门id集合
     */
    Set<Integer> getCustomDeptIds(Integer resourceId);

    /**
     * @param tableNames 表名集合
     */
    Map<String, Set<String>> getPermissionColum(Collection<String> tableNames);

    /**
     * 获取没有权限的字段
     *
     * @param dataScopeBiz 业务类型
     * @return 没有权限的字段表达式集合
     */
    List<String> getFieldNoPermissionExpression(DataHandlerBizEnum dataScopeBiz);

    /**
     * 当前登录用户部门id
     *
     * @return
     */
    Integer getDeptIdByLoginUser();

    /**
     * 查询当前登录用户需要托名的字段
     */
    Set<DesensitizedTypeEnum> getDescensitizationListByLoginUser();
}
